package com.wasion.pwportable.protocol.analyzer.terminal;

import com.wasion.core.util.ConverterXBaseUtil;
import com.wasion.pwportable.protocol.Protocol;
import com.wasion.pwportable.protocol.analyzer.AbstractAnalyzer;

public class Terminal_Comm_RD_Analyzer extends AbstractAnalyzer {

	@Override
	public void dataAnalysis(String ackBS) {
		String dataType = ackBS.substring(DATATPYESTARTBIT, DATATPYENDBIT);

		// String dataLen = ackBS.substring(DATALENGTHSTARTBIT,
		// DATALENGTHENDBIT); // 16进制的数据长度

		String data = ackBS.substring(DATABITSTART, DATABITSTART + 48);

		if (dataType.equalsIgnoreCase(Protocol.T_COMMUNICATIONS_RD)) {

			// result.setTextReply(data);

			result.setHostIP(getIP(data));
			result.setHostPort(getPort(data));
			result.setApn(getApn(data));
			result.setHeartBeat(getHeart(data));
			result.setConnection(getConnType(data));
		}
	}

	private String getApn(String data) {
		String apn = data.substring(12, 44);
		// 去掉结束符后的部分
		for (int i = 0; i < apn.length(); i++) {
			String temp = apn.substring(i * 2, i * 2 + 2);
			if (0 == Integer.parseInt(temp, 16)) {
				apn = apn.substring(0, i * 2);
				break;
			}
		}
		return ConverterXBaseUtil.decode(apn).trim();
	}

	private int getConnType(String data) {
		int type = Integer.parseInt(data.substring(46, 48), 16);
		return type;
	}

	private int getHeart(String data) {
		int heart = Integer.parseInt(data.substring(44, 46), 16);
		return heart;
	}

	private String getIP(String data) {
		int A = Integer.parseInt(data.substring(0, 2), 16);
		int B = Integer.parseInt(data.substring(2, 4), 16);
		int C = Integer.parseInt(data.substring(4, 6), 16);
		int D = Integer.parseInt(data.substring(6, 8), 16);

		return A + "." + B + "." + C + "." + D;
	}

	private String getPort(String data) {
		int port = Integer.parseInt(
				data.substring(10, 12) + data.substring(8, 10), 16);

		return port + "";
	}
}